package com.xyz.ListTest.EqualsTest;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class EqualsTest {
    public static void main(String[] args) {

        List<Person> list = new ArrayList<>();
        list.add(new Person("Xiao Ming",15));
        list.add(new Person("Xiao Hong",20));
        list.add(new Person("Bob",88));

        System.out.println(list.contains(new Person("Bob",88)));
        System.out.println("小红在当前列表 list 中索引数是:"+ list.indexOf(new Person("Xiao Hong",20)));
    }
}

class Person{
    public String name;
    public int age;

    public Person(String name,int age){
        this.age=age;
        this.name=name;
    }
    /*
    // java 类的祖宗类是 Object ，所以 Object 类的对象可以引用（获取）任意其他对象
    public boolean equals(Object o) {
        // instanceof 关键字，用来判断当前对象是否是 其后指定类的对象，返回bool值
        if (o instanceof Person) {
            Person p = (Person) o;
            boolean nameEquals = false;
            if (this.name == null && p.name == null) {
                nameEquals = true;
            }
            if (this.name != null) {
                nameEquals = this.name.equals(p.name);
            }
            return nameEquals && this.age == p.age;
        }
        return false;
    }
    */

    public boolean equals(Object o) {
        if (o instanceof Person) {
            Person p = (Person) o;
            // 使用Objects.equals()比较两个引用类型是否相等的目的是省去了判断null的麻烦。
            // 两个引用类型都是null时它们也是相等的。
            return Objects.equals(this.name, p.name) && this.age == p.age;
        }
        return false;
    }
}